#include "private_template.h"

#include <iostream>

template<class T>
void PropertyDemo<T>::Set(const T &t)
{
    val = t;
}

template<class T>
T PropertyDemo<T>::Get()
{
    return val;
}

template class PropertyDemo<int>;

template<class T>
void Print(const T &t)
{
    std::cout << std::boolalpha << t << std::endl;
}

template void Print(const int &t);
template void Print(const bool &t);

template<class T>
void NormalDemo::PrintHash(const T &t)
{
    std::cout << std::hash<T>{}(t) << std::endl;
}
template void NormalDemo::PrintHash(const std::string &t);

template<class T>
void NormalDemo::PrintDefaultHash()
{
    std::cout << std::hash<T>{}({}) << std::endl;
}
template void NormalDemo::PrintDefaultHash<int>();
template void NormalDemo::PrintDefaultHash<std::string>();

template<class T>
T NormalDemo::GetDefault()
{
    return {};
}
template int NormalDemo::GetDefault<int>();
template bool NormalDemo::GetDefault<bool>();
